<?php
require '../claroline/inc/claro_init_global.inc.php';
require 'C2IPRAT/lib/C2IPRAT.lib.php';

include_once('lib/conf.php');
include_once('lib/portfolioNumerique.lib.php');

// Classes pour la gestion des documents
include_once('lib/classes/document.class.php');
include_once('lib/classes/documentCompetence.class.php');


/**************************************************************
*  Description:
*  Serveur SOAP (soapServer.php).
**************************************************************/
   	
// includes nusoap classes
require('lib/nusoap.php');

// create server
$l_oServer = new soap_server();
  
// wsdl generation
$NAMESPACE = 'https://c2i.u-clermont1.fr/portfolio/soapServer.php';

$l_oServer->debug_flag=true;
$l_oServer->configureWSDL('C2i', $NAMESPACE, $NAMESPACE);
$l_oServer->wsdl->schemaTargetNamespace = $NAMESPACE;

// add complex type

// STRUCTURE ETAPE 1 : LISTE Referentiel -> Referentiel -> LISTE COMPETENCE -> COMPETENCE
$l_oServer->wsdl->addComplexType(
    'Competence',
    'complexType',
    'struct',
    'all',
    '',
    array(
	'id' => array('name'=>'competenceId','type'=>'xsd:int'),
        'competence' => array('name'=>'competence','type'=>'xsd:string'),
        'alinea' => array('name'=>'alinea','type'=>'xsd:int'),
	'titre' => array('name'=>'titre','type'=>'xsd:string')
    )
);
 
$l_oServer->wsdl->addComplexType(
    'CompetencesArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Competence[]')
    ),
    'tns:Competence'
);

$l_oServer->wsdl->addComplexType(
    'Referentiel',
    'complexType',
    'struct',
    'all',
    '',
    array(
	'code' => array('name'=>'code','type'=>'xsd:string'),
        'nom' => array('name'=>'nom','type'=>'xsd:string'),
	'listeCompetences' => array('type'=>'tns:CompetencesArray')
    )
);

$l_oServer->wsdl->addComplexType(
    'ReferentielArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Referentiel[]')
    ),
    'tns:Referentiel'
);

$l_oServer->wsdl->addComplexType(
    'etape1',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'referentiels' => array('name'=>'referentiels','type'=>'tns:ReferentielArray'),
	'userId' => array('name'=>'userId','type'=>'xsd:int'),
	'erreur' => array('name'=>'erreur','type'=>'xsd:string')
    )
);

// ETAPE 2
$l_oServer->wsdl->addComplexType(
    'etape2',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'uploadedFile' => array('name'=>'referentiels','type'=>'xsd:boolean'),
	'erreur' => array('name'=>'erreur','type'=>'xsd:string')
    )
);

$l_oServer->wsdl->addComplexType(
    'CompetenceId',
    'complexType',
    'struct',
    'all',
    '',
    array(
	'competenceId' => array('name'=>'competenceId','type'=>'xsd:int')
    )
);
 
$l_oServer->wsdl->addComplexType(
    'CompetenceIdArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:CompetenceId[]')
    ),
    'tns:CompetenceId'
);


// register method
$l_oServer->register('etape1', array('username' => 'xsd:string','filesize' => 'xsd:int'), array('return'=>'tns:etape1'), $NAMESPACE);
$l_oServer->register('etape2', array('userId' => 'xsd:int','filename' => 'xsd:string','file' => 'xsd:base64Binary','description' => 'xsd:string','competences' => 'tns:CompetenceIdArray'), array('return'=>'tns:etape2'), $NAMESPACE);


// method code
function etape1($username,$filesize)
{
	global $cheminSystemeDocument;
	global $C2idispo;

	$erreur = '';

	$userId = testUsername($username);


	if (!$userId)
	{
		$erreur = 'Utilisateur inconnu';
	}	

	// Si le répertoire n'existe pas
	if (file_exists($cheminSystemeDocument.$userId))
	{
		if (!verifierTailleFichier($cheminSystemeDocument.$userId,$filesize))
		$erreur = 'Fichier trop volumineux';
	}

	// Liste des compétences
	$referentiels = array();
	foreach ($C2idispo as $C2i)
	{
		$referentiels[] = listeCompetencesDispo($C2i);
	}

	return array('referentiels' => $referentiels,'erreur' => $erreur,'userId' => $userId);
}

function etape2($userId,$nomFichier,$fichier,$description,$listeCompetences)
{
	global $cheminSystemeDocument;

	if (!$userId)
	return array('uploadedFile' => false,'erreur' => 'Utilisateur inconnu');

	// ***********************************
	// 	    Upload du fichier
	// ***********************************

	// Création d'un répertoire si pas encore créé
	if (!file_exists($cheminSystemeDocument.$userId))
	mkdir($cheminSystemeDocument.$userId);

	// Change le nom du fichier s'il existe deja
	$nomFichier = verificationNomFichier($cheminSystemeDocument.$userId."/",$nomFichier);

	// Création du fichier
	if (!upload($fichier,$cheminSystemeDocument.$userId."/".$nomFichier))
	{
		// On supprime le fichier ayant pu être créé
		@unlink($cheminSystemeDocument.$userId."/".$nomFichier);
		return array('uploadedFile' => false,'erreur' => 'Problème lors du dépot du fichier');
	}

	$document = new PFLdocument();
	$document->setUserId($userId);
	$document->setChemin($nomFichier);
	$document->setDescription($description);
	$document->setFichier($nomFichier);
	$documentId = $document->save();

	if (!$documentId)
	return array('uploadedFile' => false,'erreur' => 'Problème lors de l\'enregistrement du fichier');

	// *******************************************
	// 	    Traitement des competences
	// *******************************************
	if ($listeCompetences)
	{
		foreach($listeCompetences as $competence)
		{
			$documentCompetence = new PFLdocumentCompetence();
			$documentCompetence->setUserId($userId);
			$documentCompetence->setCompetenceId($competence['competenceId']);
			$documentCompetence->setDocumentId($documentId);
			$documentCompetence->save();
		}
	}

	return array('uploadedFile' => true,'erreur' => '');
}




function listeCompetencesDispo($a_stInput)
{
	$nom['N1'] = 'C2i niveau 1';
	$nom['N2MD'] = 'C2i niveau 2 métiers du droit';
	$nom['N2MS'] = 'C2i niveau 2 métiers de la santé';
	$nom['N2MEAD'] = 'C2i niveau 2 métiers de l\'environnement et de l\'aménagement durable';

	// Liste des compétences
	$listeCompetencesDB = chercheReferentiel($a_stInput,'pratique');

	foreach ($listeCompetencesDB as $competence)
	{
		$listeCompetences[] = array('id' => $competence['id'] , 'competence' => $competence['competence'] , 'alinea' => $competence['alinea'] , 'titre' => $competence['titre']);
	}


	$comp = array(
                 'code' => $a_stInput,
                 'nom' => $nom[$a_stInput],
		 'listeCompetences' => $listeCompetences);

     	return $comp;
}

function upload($source,$destination)
{
	// Traitement de l'upload
	$handle = fopen($destination, "w");

	if ($handle)
	{
	  $data = $source;

	  $feedback = fwrite($handle, $data);

	  fclose($handle);
	}
	

	return $feedback;
}
  
// pass incoming (posted) data
$l_oServer->service($HTTP_RAW_POST_DATA);
?>
